package com.tzkyzj.tiremanager.repository;




import com.tzkyzj.tiremanager.entity.Tire;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.List;

@Repository
public interface TireRepository extends JpaRepository<Tire, Long> {

    // 根据轮胎号查询
    Tire findByTireNumber(String tireNumber);

    // 根据轴数和位置查询轮胎
    Tire findByAxleNumberAndTirePosition(Integer axleNumber, String tirePosition);

    // 根据车牌号查询
    List<Tire> findByVehiclePlateNumber(String vehiclePlateNumber);
    List<Tire> findByTrailerPlateNumber(String trailerPlateNumber);

    // 添加模糊查询方法
    @Query("SELECT t FROM Tire t WHERE t.trailerPlateNumber LIKE %:plateNumber% OR t.vehiclePlateNumber LIKE %:plateNumber%")
    List<Tire> findByPlateNumberContaining(@Param("plateNumber") String plateNumber);

    // 添加忽略空格的查询
    @Query("SELECT t FROM Tire t WHERE REPLACE(t.trailerPlateNumber, ' ', '') = REPLACE(:plateNumber, ' ', '')")
    List<Tire> findByTrailerPlateNumberIgnoreSpaces(@Param("plateNumber") String plateNumber);


    // 查询所有未报废的轮胎
    List<Tire> findByScrapDateIsNull();

    // 查询所有已报废的轮胎
    List<Tire> findByScrapDateIsNotNull();

    // 根据品牌查询
    List<Tire> findByTireBrand(String tireBrand);

    // 根据运输公司查询
    List<Tire> findByTransportCompany(String transportCompany);

    // 根据轮胎位置查询
    List<Tire> findByPosition(String position);

    // 根据轴号查询
    List<Tire> findByAxleNumber(Integer axleNumber);

    // 查询使用公里数大于指定值的轮胎
    @Query("SELECT t FROM Tire t WHERE t.scrapMileage - t.installMileage > ?1")
    List<Tire> findByUsedMileageGreaterThan(Integer mileage);

    // 根据运输公司和位置查询
    List<Tire> findByTransportCompanyAndPosition(String transportCompany, String position);

    // 查询所有不同的运输公司
    @Query("SELECT DISTINCT t.transportCompany FROM Tire t WHERE t.transportCompany IS NOT NULL")
    List<String> findDistinctTransportCompanies();

    // 查询所有不同的轮胎位置
    @Query("SELECT DISTINCT t.position FROM Tire t WHERE t.position IS NOT NULL")
    List<String> findDistinctPositions();

    // 在TireRepository中添加
    @Query("SELECT t FROM Tire t WHERE t.swapRecords IS NOT NULL")
    List<Tire> findTiresWithSwapRecords();

    @Query("SELECT t FROM Tire t WHERE t.swapCost > 0")
    List<Tire> findTiresWithSwapCost();


    // 在 TireRepository 接口中添加
    List<Tire> findByVehiclePlateNumberContaining(String vehiclePlateNumber);
    List<Tire> findByTrailerPlateNumberContaining(String trailerPlateNumber);

// 在 TireRepository 接口中添加以下方法

    /**
     * 模糊查询轮胎编号
     */
    List<Tire> findByTireNumberContaining(String tireNumber);

    /**
     * 模糊查询轮胎编号并按编号排序
     */
    List<Tire> findByTireNumberContainingOrderByTireNumber(String tireNumber);

    /**
     * 根据运输公司模糊查询轮胎编号
     */
    List<Tire> findByTransportCompanyAndTireNumberContaining(String transportCompany, String tireNumber);

    // 根据车牌号和轴号查询
    List<Tire> findByVehiclePlateNumberAndAxleNumber(String vehiclePlateNumber, Integer axleNumber);
    List<Tire> findByTrailerPlateNumberAndAxleNumber(String trailerPlateNumber, Integer axleNumber);
}